package com.nian.generator;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * 用途：数据库模型生成器
 * 开发：zhangmj
 * 日期：2020/3/28 17:23
 */
public class MyBatisPlusGenerator {
    public static void main(String[] args) {
        String modelName = "nian-user-center/nian-images-service";
        createByModel(modelName);
    }

    public static void createByModel(String projectModel) {
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        System.out.println("目录：" + projectModel);
        String projectPath = projectModel + "/src/main/java";
        System.out.println("目录：" + projectPath);
        gc.setOutputDir(projectPath);
        // 文件覆盖
        gc.setFileOverride(false);
        gc.setAuthor("zhangmj");
        // 生成后打开文件夹;
        gc.setOpen(false);
        gc.setSwagger2(true);
        // 生成基本的resultMap
        gc.setBaseResultMap(true);
        // 生成基本的SQL片段
        gc.setBaseColumnList(true);
        // 主键自动返回
        gc.setIdType(IdType.AUTO);
        // 设置日期
        gc.setActiveRecord(true);
        gc.setEnableCache(true);


        String url = "jdbc:mysql://127.0.0.1:3306/nian_images?autoReconnect=true&autoReconnectForPools=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl(url);
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("nian");
        dsc.setPassword("nian");
        // 关闭默认生成，如果设置空 OR Null 将不生成该模块。
        TemplateConfig templateConfig = new TemplateConfig();
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.nian.images")
                .setEntity("model")
                .setMapper("dao")
                .setXml("dao.mapping")
                .setService("service")
                .setServiceImpl("service.impl")
                .setController("controller");

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // 表名生成策略(下划线转驼峰命名)
        strategy.setNaming(NamingStrategy.underline_to_camel);
        // 列名生成策略(下划线转驼峰命名)
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 是否启动Lombok配置
        strategy.setEntityLombokModel(true);
        // 是否启动REST风格配置
        strategy.setRestControllerStyle(true);

        // 需要生成的表, 不配置则默认数据库内全部数据
        String[] tables = {"images_app"};
        strategy.setInclude(tables);
        // 自动生成
        AutoGenerator mpg = new AutoGenerator();
        mpg.setDataSource(dsc);
        mpg.setGlobalConfig(gc);
        mpg.setStrategy(strategy);
        mpg.setPackageInfo(pc);
        mpg.setTemplate(templateConfig);
        // 执行
        mpg.execute();
    }
}
